package com.hgy.fxui;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
@MapperScan("com.hgy.fxui.dao")
public class HospitalDrugApplication extends Application {
    static {
        // 添加必要的模块导出
        System.setProperty("javafx.graphics.allowall", "true");
    }

    private static ConfigurableApplicationContext springContext;

    // 1. 使用Spring Boot主类（当前类）初始化上下文
    @Override
    public void init() {
        String[] args = getParameters().getRaw().toArray(new String[0]);
        springContext = SpringApplication.run(HospitalDrugApplication.class, args);
    }

    /**
     * JavaFX 应用程序入口点
     * 尺寸不变化根本原因：JavaFX的Stage会记忆前一次的尺寸设置，当更换Scene时不会自动重置尺寸
     * @param stage
     * @throws Exception
     */
    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/login.fxml"));
        fxmlLoader.setControllerFactory(springContext::getBean);

        // 1. 这里不再设置场景尺寸，让场景自适应内容
        Scene scene = new Scene(fxmlLoader.load());
        stage.setTitle("医药管理系统");

        stage.setScene(scene);
        stage.sizeToScene(); // 自动调整到最适大小
        stage.centerOnScreen();
        stage.show();
    }

    @Override
    public void stop() {
        if (springContext != null) {
            springContext.close();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }

    // 暴露 Spring 上下文，供其他控制器使用
    public static ConfigurableApplicationContext getSpringContext() {
        return HospitalDrugApplication.springContext;
    }
}